#!/bin/bash

# 获取系统版本信息
OS_VERSION=$(rpm -q --queryformat '%{VERSION}' $(rpm -q --whatprovides redhat-release))
OS_MAJOR_VERSION=${OS_VERSION%%.*}

# 显示各仓库配置详情
echo -e "\n软件源详细信息："
if command -v yum &> /dev/null; then
    # 基于 yum 的系统（如 CentOS、RHEL）
    if [ "$OS_MAJOR_VERSION" = "7" ]; then
        REPO_URL="https://mirrors.aliyun.com/repo/Centos-7.repo"
    elif [ "$OS_MAJOR_VERSION" = "8" ]; then
        REPO_URL="https://mirrors.aliyun.com/repo/Centos-8.repo"
    else
        echo "不支持的 CentOS 版本，请手动配置软件源。"
        exit 1
    fi
    curl -o /etc/yum.repos.d/CentOS-Base.repo $REPO_URL && yum update -y
    if [ $? -ne 0 ]; then
        echo "基于 yum 系统的软件源更新失败，请手动处理。"
        exit 1
    fi
elif command -v apt &> /dev/null; then
    # 基于 apt 的系统（如 Ubuntu、Debian）
    apt update
    if [ $? -ne 0 ]; then
        echo "基于 apt 系统的软件源更新失败，请手动处理。"
        exit 1
    fi
    apt upgrade -y
    if [ $? -ne 0 ]; then
        echo "基于 apt 系统的软件升级失败，请手动处理。"
        exit 1
    fi
else
    echo "不支持的包管理工具，请手动更新软件源。"
    exit 1
fi

# 检查内核版本
uname -r

# 关闭防火墙
if command -v systemctl &> /dev/null; then
    # 支持 systemd 的系统
    systemctl stop firewalld 2>/dev/null
    systemctl disable firewalld 2>/dev/null
    systemctl status firewalld 2>/dev/null
    systemctl stop ufw 2>/dev/null
    systemctl disable ufw 2>/dev/null
    systemctl status ufw 2>/dev/null
else
    # 不支持 systemd 的系统
    echo "不支持的服务管理工具，请手动关闭防火墙。"
fi

# 修改 /etc/selinux 目录中的 config 文件，设置 SELINUX 为 disabled
if [ -f /etc/selinux/config ]; then
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
fi

# 安装配置 NTPD 服务器
if command -v yum &> /dev/null; then
    yum -y install ntpdate && ntpdate ntp1.aliyun.com
    if [ $? -ne 0 ]; then
        echo "基于 yum 系统的 NTP 时间同步配置失败，请手动处理。"
    fi
elif command -v apt &> /dev/null; then
    apt install -y ntpdate && ntpdate ntp1.aliyun.com
    if [ $? -ne 0 ]; then
        echo "基于 apt 系统的 NTP 时间同步配置失败，请手动处理。"
    fi
else
    echo "不支持的包管理工具，请手动安装 ntpdate 并同步时间。"
fi

# 卸载旧版本 docker（如果存在）
if command -v yum &> /dev/null; then
    yum remove -y docker docker-common docker-selinux docker-engine
    if [ $? -eq 0 ]; then
        echo "基于 yum 系统的旧版本 Docker 卸载成功。"
    else
        echo "基于 yum 系统的旧版本 Docker 卸载失败，请手动处理。"
    fi
elif command -v apt &> /dev/null; then
    apt remove -y docker docker-engine docker.io containerd runc
    if [ $? -eq 0 ]; then
        echo "基于 apt 系统的旧版本 Docker 卸载成功。"
    else
        echo "基于 apt 系统的旧版本 Docker 卸载失败，请手动处理。"
    fi
else
    echo "不支持的包管理工具，请手动卸载旧版本 Docker。"
fi

# 安装依赖软件包
if command -v yum &> /dev/null; then
    yum install -y yum-utils device-mapper-persistent-data lvm2
    if [ $? -ne 0 ]; then
        echo "基于 yum 系统的依赖软件包安装失败，请手动处理。"
        exit 1
    fi
elif command -v apt &> /dev/null; then
    apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
    if [ $? -ne 0 ]; then
        echo "基于 apt 系统的依赖软件包安装失败，请手动处理。"
        exit 1
    fi
else
    echo "不支持的包管理工具，请手动安装依赖软件包。"
    exit 1
fi

# 配置 docker-ce 的 yum 源或 apt 源
if command -v yum &> /dev/null; then
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum makecache fast -y
    if [ $? -ne 0 ]; then
        echo "基于 yum 系统的 Docker 源配置失败，请手动处理。"
        exit 1
    fi
elif command -v apt &> /dev/null; then
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    if [ $? -ne 0 ]; then
        echo "基于 apt 系统的 Docker GPG 密钥下载处理失败，请手动处理。"
        exit 1
    fi
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    apt update
    if [ $? -ne 0 ]; then
        echo "基于 apt 系统的 Docker 源更新失败，请手动处理。"
        exit 1
    fi
else
    echo "不支持的包管理工具，请手动配置 Docker 源。"
    exit 1
fi

# 查看 docker 版本并安装
if command -v yum &> /dev/null; then
    yum install -y docker-ce
    if [ $? -ne 0 ]; then
        echo "基于 yum 系统的 Docker 安装失败，请手动处理。"
        exit 1
    fi
elif command -v apt &> /dev/null; then
    apt install -y docker-ce
    if [ $? -ne 0 ]; then
        echo "基于 apt 系统的 Docker 安装失败，请手动处理。"
        exit 1
    fi
else
    echo "不支持的包管理工具，请手动安装 Docker。"
    exit 1
fi

# 启动 docker
if command -v systemctl &> /dev/null; then
    systemctl start docker
    if [ $? -ne 0 ]; then
        echo "基于 systemd 系统的 Docker 启动失败，请手动处理。"
    fi
    systemctl enable docker
    if [ $? -ne 0 ]; then
        echo "基于 systemd 系统的 Docker 设置开机自启失败，请手动处理。"
    fi
else
    echo "不支持的服务管理工具，请手动启动 Docker 并设置开机自启。"
fi

# 配置镜像加速
mkdir -p /etc/docker
echo '{"registry-mirrors":["https://docker.1ms.run"]}' | tee /etc/docker/daemon.json > /dev/null

# 重新加载配置
if command -v systemctl &> /dev/null; then
    systemctl daemon-reload
    if [ $? -ne 0 ]; then
        echo "基于 systemd 系统的 Docker 配置重新加载失败，请手动处理。"
    fi
    systemctl restart docker
    if [ $? -ne 0 ]; then
        echo "基于 systemd 系统的 Docker 重启失败，请手动处理。"
    fi
else
    echo "不支持的服务管理工具，请手动重新加载配置并重启 Docker。"
fi

echo 'docker installation finished!'